package com.atguigu.lease.web.admin.service.impl;

import com.atguigu.lease.common.exception.StgyException;
import com.atguigu.lease.common.result.ResultCodeEnum;
import com.atguigu.lease.web.admin.mapper.PaymentTypeMapper;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.lease.model.entity.PaymentType;
import org.springframework.stereotype.Service;

/**
* @author 1
* @description 针对表【payment_type(支付方式表)】的数据库操作Service实现
* @createDate 2024-08-28 11:00:26
*/
@Service
public class PaymentTypeServiceImpl extends ServiceImpl<PaymentTypeMapper, PaymentType>
    implements PaymentTypeService {
    /*
        优化校验逻辑
        删除
        全局异常处理

        前端请求路径代理分析
     */
    @Override
    public boolean saveOrUpdatePaymentType(PaymentType paymentType) {
        //获取传入的参数的id值 如果为空返回一个数据库一定不存在的id值
        Long id = paymentType.getId()==null?-1:paymentType.getId();
        PaymentType dbPaymentType = this.getOne(Wrappers.lambdaQuery(PaymentType.class)
                .eq(PaymentType::getName, paymentType.getName())
                .last("limit 1")
        );
//        PaymentType dbPaymentType = this.getById(id);
        //如果是新增 根据name查询数据库查询数据失败,查询到的dbPaymentType一定为空
        // 新增: (当dbPaymentType为空时 && id=-1)
        //如果是更新: 根据name查询数据库,
        //      当dbPaymentType为空可以继续执行
        //      当dbPaymentType不为空,并且dbPaymentType的id等于传入的id时 可以继续执行

        //  if(dbPaymentType!=null && !id.equals(dbPaymentType.getId()))
        //dbPaymentType==null 表示使用name值在数据库没有查询到数据,名称可以使用
        // !id.equals(dbPaymentType.getId()):  如果新增 使用-1和数据库查询到的数据id比较一定不相等
        //                      如果更新: 使用传入的id 和数据库查询到的id比较 相等,表示查询到自己的数据 可以继续执行更新
        //                                          不相等 表示查询到的数据不是自己的,重名了
        if( dbPaymentType!=null && !id.equals(dbPaymentType.getId())){
            // 通过异常对象携带 失败的code值和message
            throw new StgyException(ResultCodeEnum.PAYMENT_TYPE_EXISTS_ERROR);
        }
        return this.saveOrUpdate(paymentType);
    }

    //name值唯一性校验
    //判断新增还是更新
//        Long id = paymentType.getId();
//        PaymentType dbPaymentType = this.getOne(Wrappers.lambdaQuery(PaymentType.class)
//                .eq(PaymentType::getName, paymentType.getName())
//                .last("limit 1")
//        );
//        if(id==null){
//            //新增时 名称已存在
//            if(dbPaymentType!=null){
//                throw new RuntimeException("支付方式名称已存在");
//            }
//        }else{
//            //更新时 名称被占用
//            if(!dbPaymentType.getId().equals(paymentType.getId())){
//                throw new RuntimeException("支付方式名称已存在");
//            }
//        }
}




